package com.elloe.实现二叉树的Node节点.深度优先遍历;

import com.elloe.实现二叉树的Node节点.Node的Java实现.Node;

import java.util.Stack;

/**
 * @author ElloeStudy(Sifa Zhang)
 * @create 2022-04-09 20:21
 * To: 真常应物，真常得性，常清常静，常清静矣
 */
public class DFS {
    public void dfs(Node root) {
        if (root == null){
            return;
        }

        Stack<Node> stack = new Stack<>();
        stack.push(root); // 将根节点压入栈里面

        while (!stack.isEmpty()){
            Node node = stack.pop(); // 弹出栈顶的节点
            System.out.print(node.getValue() + " ");

            // 深度优先遍历，先遍历左边在右边，所以先将右边压入再将左边压入
            if (node.getRight() != null){
                stack.push(node.getRight());
            }
            if (node.getLeft() != null){
                stack.push(node.getLeft());
            }
        }
    }
}
